package com.tensquare.base.controller;

import com.tensquare.base.pojo.Lable;
import com.tensquare.base.sevice.LableService;
import entity.PageResult;
import entity.Result;
import entity.StatusCode;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 *  @Controller执行过程
 *  DispatcherServlet 分发请求，它把用户请求的数据经过业务处理层处理之后封装成一个Model ，然后再把该Model 返回给对应的View （）进行展示。。。。。。（@RequestMapping（"/xxx"）使得该controller能被外界进行访问，相当于servlet中的url映射，或者@WebServlet注解），，用@Controller初始化一个controller，用@RequestMapping给出它的访问路径，或者说触发路径 ，触发条件。
 *
     @ResponseBody
 *
 *  将controller的方法返回的对象通过适当的转换器转换为指定的格式之后，写入到response对象的body区，通常用来返回JSON数据或者是XML数据，需要注意的是，在使用此注解之后不会再走视图处理器，而是直接将数据写入到输出流（InputStream(字节输入流)，或者抽象类Reader(字符输入流)，抽象类OutputStream(字节输出流)或者Writer(字符输出流)）中，他的效果等同于通过response对象输出指定格式的数据
 * ---------------------
 *
 *   虽然函数有return值，但加了@ResponseBody，可将其当成void型函数来理解
 *
 * @RestController注解相当于@Controller + @ResponseBody 合在一起的作用。
 */
@RestController //把返回数据转成json格式
@CrossOrigin // 允许跨域
@RequestMapping("/label")
public class BaseController {
    @Resource
    private LableService lableService;
    @GetMapping
    public Result findAll(){
        return  new Result(true,StatusCode.OK,"查询成功", lableService.findAll());
    }
    @GetMapping("/{labelId}")
    public Result findById(@PathVariable("labelId") String labelId){
        return  new Result(true,StatusCode.OK,"查询成功",lableService.findById(labelId));
    }

    /**
     * @RequestBody ,把json参数转换成对象
     * @param label
     * @return
     */
    @PostMapping
    public Result save(@RequestBody Lable label){
        lableService.save(label);
        return  new Result(true,StatusCode.OK,"保存成功");
    }

    @PutMapping("/{labelId}")
    public Result update(@PathVariable("labelId") String labelId,@RequestBody Lable label){
        lableService.update(label);
        return  new Result(true,StatusCode.OK,"更新成功");
    }

    @DeleteMapping("/{labelId}")
    public Result delete(@PathVariable("labelId") String labelId){
        return  new Result(true,StatusCode.OK,"删除成功");
    }

    @PostMapping(value = "/search")
    public Result findSearch(@RequestBody Lable label){
        List<Lable> list  = lableService.findSearch(label);
        return  new Result(true,StatusCode.OK,"查询成功",list);
    }


    @PostMapping(value = "/search/{page}/{size}")
    public Result pageSearch(@RequestBody Lable label, @PathVariable int page, @PathVariable  int size){
        Page<Lable> pageData  = lableService.pageSearch(label,page,size);
        return  new Result(true,StatusCode.OK,"查询成功",new PageResult<Lable>(pageData.getTotalElements(),pageData.getContent()));
    }



}
